home *** CD-ROM | disk | FTP | other *** search
/ Champak 29 / Volume 29 - JOGO DISK .iso / Games / jungle_adventure.swf / scripts / __Packages / SSCollision.as < prev    next >
Text File  |  2006-11-29  |  6KB  |  163 lines

  1. class SSCollision
  2. {
  3.    function SSCollision(point, normal, time, edge)
  4.    {
  5.       this.point = point;
  6.       this.normal = normal;
  7.       this.edge = edge;
  8.       this.time = time;
  9.    }
  10.    static function sweepSphereToStaticShape(sphere, shape, noData)
  11.    {
  12.       if(sphere.motionLeft > shape.right || sphere.motionRight < shape.left || sphere.motionTop > shape.bottom || sphere.motionBottom < shape.top)
  13.       {
  14.          return undefined;
  15.       }
  16.       var _loc16_ = sphere.motionVec;
  17.       var _loc9_ = sphere.motionDir;
  18.       var _loc5_ = sphere.motionDist;
  19.       var _loc15_ = sphere.motionTime;
  20.       var _loc4_ = sphere.radius;
  21.       var _loc25_ = undefined;
  22.       var _loc8_ = undefined;
  23.       var _loc23_ = undefined;
  24.       var _loc7_ = 255;
  25.       var _loc14_ = new Vector(sphere.x - shape.x,sphere.y - shape.y,0);
  26.       var _loc28_ = shape.colEdges;
  27.       var _loc26_ = _loc28_.length;
  28.       var _loc24_ = 0;
  29.       var _loc1_ = undefined;
  30.       var _loc10_ = undefined;
  31.       var _loc21_ = undefined;
  32.       while((_loc26_ = _loc26_ - 1) > -1)
  33.       {
  34.          if(_loc1_ = _loc28_[_loc26_].props & 1)
  35.          {
  36.             var _loc20_ = _loc1_.normal;
  37.             if(_loc9_.x * _loc20_.x + _loc9_.y * _loc20_.y < 0)
  38.             {
  39.                var _loc17_ = _loc1_.a;
  40.                _loc10_ = new Vector(_loc1_.center.x - _loc14_.x,_loc1_.center.y - _loc14_.y,0);
  41.                if(_loc10_.length - _loc4_ - _loc5_ <= _loc1_.radius)
  42.                {
  43.                   var _loc2_ = new Vector(_loc14_.x - _loc17_.x,_loc14_.y - _loc17_.y);
  44.                   var _loc18_ = new Vector(_loc2_.x - _loc1_.normal.x * _loc4_,_loc2_.y - _loc1_.normal.y * _loc4_);
  45.                   var _loc11_ = _loc1_.span;
  46.                   var _loc6_ = (_loc16_.x * (- _loc18_.y) - _loc16_.y * (- _loc18_.x)) / (_loc16_.y * _loc11_.x - _loc16_.x * _loc11_.y);
  47.                   var _loc3_ = undefined;
  48.                   if(_loc6_ >= 0 && _loc6_ <= 1)
  49.                   {
  50.                      var _loc12_ = new Vector(_loc11_.x * _loc6_ + _loc1_.normal.x * _loc4_,_loc11_.y * _loc6_ + _loc1_.normal.y * _loc4_,0);
  51.                      var _loc22_ = new Vector(_loc12_.x - _loc2_.x,_loc12_.y - _loc2_.y);
  52.                      if((_loc3_ = _loc22_.length) <= _loc5_)
  53.                      {
  54.                         if(_loc7_ < _loc3_ / _loc5_ * _loc15_)
  55.                         {
  56.                            continue;
  57.                         }
  58.                         _loc8_ = _loc12_;
  59.                         _loc7_ = _loc3_ / _loc5_ * _loc15_;
  60.                         _loc25_ = _loc1_.normal;
  61.                         _loc23_ = _loc1_;
  62.                         if(_loc7_ < 0.0001)
  63.                         {
  64.                            _loc7_ = 0;
  65.                            _loc12_.x = _loc2_.x;
  66.                            _loc12_.y = _loc2_.y;
  67.                            break;
  68.                         }
  69.                         if((_loc24_ = _loc24_ + 1) >= 2)
  70.                         {
  71.                            break;
  72.                         }
  73.                         var _loc19_ = _loc1_.length * _loc6_;
  74.                         if(_loc19_ > _loc4_ * 2 && _loc19_ < _loc1_.length - _loc4_ * 2)
  75.                         {
  76.                            break;
  77.                         }
  78.                      }
  79.                   }
  80.                   else
  81.                   {
  82.                      _loc12_ = _loc6_ <= 1 ? Vector.ZERO : _loc1_.span;
  83.                      _loc10_ = _loc21_ = new Vector(_loc12_.x - _loc2_.x,_loc12_.y - _loc2_.y).length;
  84.                      var _loc13_ = _loc21_.x * _loc9_.x + _loc21_.y * _loc9_.y;
  85.                      _loc3_ = _loc4_ * _loc4_ - (_loc10_ * _loc10_ - _loc13_ * _loc13_);
  86.                      if(_loc3_ > 0 && (_loc3_ = _loc13_ - Math.sqrt(_loc3_)) < _loc5_)
  87.                      {
  88.                         if(_loc7_ < _loc3_ / _loc5_ * _loc15_ || _loc3_ / _loc5_ < 0)
  89.                         {
  90.                            continue;
  91.                         }
  92.                         _loc7_ = _loc3_ / _loc5_ * _loc15_;
  93.                         _loc23_ = _loc1_;
  94.                         _loc8_ = new Vector(_loc2_.x + _loc3_ * _loc9_.x,_loc2_.y + _loc3_ * _loc9_.y,0);
  95.                         (_loc25_ = new Vector(_loc8_.x - _loc12_.x,_loc8_.y - _loc12_.y,0)).normalize();
  96.                         if(_loc7_ < 0.0001)
  97.                         {
  98.                            _loc8_.x = _loc2_.x;
  99.                            _loc8_.y = _loc2_.y;
  100.                            break;
  101.                         }
  102.                         if((_loc24_ = _loc24_ + 1) >= 2)
  103.                         {
  104.                            break;
  105.                         }
  106.                      }
  107.                   }
  108.                }
  109.             }
  110.          }
  111.       }
  112.       if(_loc23_)
  113.       {
  114.          _loc8_.x += shape.x + _loc23_.a.x;
  115.          _loc8_.y += shape.y + _loc23_.a.y;
  116.          return new SSCollision(_loc8_,_loc25_,_loc7_,_loc23_);
  117.       }
  118.       return null;
  119.    }
  120.    static function sweepSphereToSphere(obj, sphObj, noData)
  121.    {
  122.       var _loc3_ = obj.radius + sphObj.radius;
  123.       var _loc6_ = undefined;
  124.       var _loc2_ = undefined;
  125.       var _loc4_ = undefined;
  126.       var _loc5_ = undefined;
  127.       _loc2_ = _loc6_ = new Vector(sphObj.x - obj.x,sphObj.y - obj.y,0).length;
  128.       var _loc9_ = undefined;
  129.       if(_loc2_ < _loc3_)
  130.       {
  131.          return true;
  132.       }
  133.       if(obj.motionDist < _loc2_ - _loc3_)
  134.       {
  135.          return false;
  136.       }
  137.       if((_loc4_ = _loc6_.x * obj.motionDir.x + _loc6_.y * obj.motionDir.y) < 0)
  138.       {
  139.          return false;
  140.       }
  141.       if((_loc5_ = _loc3_ * _loc3_ - (_loc2_ * _loc2_ - _loc4_ * _loc4_)) <= 0 || (_loc5_ = _loc4_ - Math.sqrt(_loc5_)) > obj.motionDist || _loc5_ < 0)
  142.       {
  143.          return undefined;
  144.       }
  145.       if(noData)
  146.       {
  147.          return true;
  148.       }
  149.       return false;
  150.    }
  151.    static function sweepBoundsToBounds(mObj, sObj, noData)
  152.    {
  153.       if(mObj.right >= sObj.left && mObj.left <= sObj.right && mObj.top <= sObj.bottom && mObj.bottom >= sObj.top)
  154.       {
  155.          return undefined;
  156.       }
  157.       if(mObj.motionRight >= sObj.left && mObj.motionLeft <= sObj.right && mObj.motionTop <= sObj.bottom && mObj.motionBottom >= sObj.top)
  158.       {
  159.          return true;
  160.       }
  161.    }
  162. }
  163.